<?php
/**
 * Контроллер административной панели, реализующий управление медиа-ресурсами (загружаемыми на сервер файлами)
 * 
 * @category Phorm
 * @package Controller_Module_Control
 * @name /Phorm/Controller/Module/Control/Media.php
 * @copyright phorm.ru
 * @since 05.05.2012
 * @author vladimir@kachalov.net
 */

class Phorm_Controller_Module_Control_Media extends Phorm_Controller_Controller {
	
	/**
	 * Экземпляр класса медиа-ресурсов
	 * @var Phorm_Media
	 */
	public $Media;
	
	/**
	 * Предиспетчер
	 * 
	 * @return void
	 */
		
	public function preDispatch() {
		
		$this->Media = new Phorm_Media();
		
	}
	
	
	/**
	 * Главная страница - Список файлов
	 * 
	 * @return void
	 */
		
	public function indexAction() {
		
		$localform = $this->Media->getLocalFileForm();
		$remoteform = $this->Media->getRemoteFileForm();
		$this->view->assign('RemoteForm',$remoteform);
		
		
		
		$options = Phorm_Config::xml('grids/control/media.xml');
		
		if($this->_request->isXmlHttpRequest()) {

			$rows = $this->Media->getMediaList($this->_params);
			$paginator = $this->Media->getPaginator();
			$this->_helper->json(Phorm_JQuery_DataGrid::data($rows,$paginator,$options));
			
		} else {
			
			$this->view->assign('MediaDataTable',$this->view->DataGrid('MediaDataTable',$options));
			
		}
		
	}
	
	
	/**
	 * Загрузка файла
	 * 
	 * @return void
	 */
		
	public function addAction() {
		
		$localform = $this->Media->getLocalFileForm();
			
		$remoteform = $this->Media->getRemoteFileForm();
		$remoteform -> setAction($this->view->siteUrl().'/control/media/add/iframe/true/');
			
		//$form = $this->Media->getEditFileForm();
		
		// Получаем список разрешенных расширений
		//$extensions = $localform->localfile->getValidator('Extension')->getExtension();
		
		// Обработчик формы загрузки файла с диска
		
		if($_FILES && isset($this->_params['iframe'])) {
			
			print_r($_FILES);

		// Обработчик формы загрузки файла по URL
			
		} elseif(isset($this->_params['remotefile']) && isset($this->_params['iframe'])) {
			
			// Пока не используем....
			
		// Обработчик ProgressBar
			
		} elseif($this->_request->isXmlHttpRequest() && isset($this->_params['apcuid'])) {
			
			/*Array
				(
				    [total] => 111350408
				    [current] => 111350408
				    [rate] => 155810619.10188
				    [filename] => ladyinfo-ru.tar.gz
				    [name] => localfile
				    [cancel_upload] => 0
				    [done] => 1
				    [start_time] => 1322610088.8458
				)*/
			
			$result = apc_fetch('upload_' . $this->_params['apcuid']);
			
			// Проверка расширения файла
			if($result && !in_array(strtolower(pathinfo($result['filename'],PATHINFO_EXTENSION),$extensions))) {
				$result['error'] = $this->_translate->_('Недопустимое расширение файла');
			}
			
			$this->_helper->json($result);
			
		// Обработчик данных формы свойств файла
			
		} elseif($this->_request->isPost()) {
			
			if($form->isValid($this->_request->getPost())) {
							
				$FormData = $form->getValues();
				
				print_r($FormData);
						
				/*if($FormData = $this->Resource->saveArticle($FormData)) {
					$this->_usersession->SuccessForm = $this->_translate->_('Материал размещен');
					return $this->_redirect($this->view->siteUrl().'/control/articles/');
				} else {
					$this->view->assign('Errors',$this->Resource->_errors);
				}*/
							
			} else {
							
				$this->view->assign('Errors',array($this->_translate->_('При заполнении формы были обнаружены ошибки')));
							
			}
			
		// Инициализация формы загрузки файла
			
		} else {
			
			$this->view->assign('LocalForm',$localform);
			$this->view->assign('RemoteForm',$remoteform);
			//$this->view->assign('Form',$form);
			
		}
		
	}
	
	
	/**
	 * Загрузка файлов
	 * Метод переписан для поддержки IE8- и загрузку через iframe
	 * 
	 * @return void
	 */
		
	public function uploadAction() {
			
		Zend_Controller_Action_HelperBroker::removeHelper('viewRenderer');
		
		if(isset($this->_params['type'])) {
				
			$filetype = $this->_params['type'];
			foreach ($_FILES as $filename=>$data) break; // Определяем имя элемента загружаемого файла
				
			// Получаем конфигурацию формы
			$config = Phorm_Config::xml('forms/control/media.xml','upload');
				
			if(isset($config['elements'][$filetype]) && isset($filename)) {
					
				// Выделяем из конфигурации формы нужный тип элемента и инициализируем форму с нужным именем элемента
				$form = new Phorm_Form(null,null,array('elements'=>array($filename=>$config['elements'][$filetype])));
					
				// Получаем объект элемента из формы
				$element = $form->getElement($filename);
							
				// Валидируем элемент		
				if($element->isValid($filename)) {
								
					// Получаем информацию о файле
					$fileinfo = $element->getTransferAdapter()->getFileInfo($filename);
					// Добавляем тип медиа-файла
					$fileinfo[$filename]['mediatype'] = $filetype;
							
					// Сохраняем файл в медиа-библиотеке
					if($MediaInfo = $this->Media->saveUploadedFile($fileinfo[$filename])) {
						// Возвращаем информацию о файле как об объекте медиа-библиотеки
						exit(Zend_Json::encode(array($MediaInfo)));
					} else {
						// Ошибки сохранения		
						exit(Zend_Json::encode(array(array('errors'=>array_values($this->Media->_errors)))));
					}
										
				} else {
							
					// Ошибки валидации			
					exit(Zend_Json::encode(array(array('errors'=>array_values($form->getMessages())))));
										
				}
				
			} else {
					
				// Ошибка в запросе типа элемента
				exit(Zend_Json::encode(array(array('errors'=>array(array($this->_translate->_('Неверный тип запроса')))))));
					
			}
				
		} else {
				
			// Ошибка - не указан тип элемента
			exit(Zend_Json::encode(array(array('errors'=>array(array($this->_translate->_('Не задан тип')))))));
					
		}
		
	}
	
}